﻿/****************************** Module Header ******************************\
* Plus Name:  DropDownControl.js
* Plus Version:  1.0.0 (2012-2-7)
* Copyright (c) JianDanMai.Com (14507247@qq.com)
* 
* This plus used to option the catalog combobox webcontrols.
* 
* This source is subject to the GPL License.
* See http://www.gnu.org/licenses/gpl.html.
* All other rights reserved.
* 
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, 
* EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED 
* WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
\***************************************************************************/

(function($) {
    $.fn.extend({
        'DropDownControl': function(options) {
            if (!$(this)[0]) return;
            options = $.extend({ value: '请选择分类 ∨', data: '', style: { 'display': 'none', 'position': 'absolute', 'background': '#FFF', 'border': 'solid 1px #CCC', 'padding': '0px 10px 10px 10px', 'line-height': '21px','z-index':'999' }, height: '', width: '', valueInputID: '', sublevMarginLeft: '20', debug: false }, options);

            var o = {};
            o.$e = $(this);
            if (!options.valueInputID) options.valueInputID = o.$e.attr('id') + 'hidValue';
            o.$ev = $('#' + options.valueInputID);
            // 个性控制栏
            o.$data = $(options.data).prepend('<div><a href="###" title="收起所有二级分类">&lt;&lt;&lt;</a> <a href="###" title="收起所有三级分类">&lt;&lt;</a></div>');
            // 调试信息
            if (options.debug) {
                alert('样式分类名称：\n一级分类:lev1,二级分类:lev2,以此类推\n');
            }
            // 设置内容样式
            o.$data.css(options.style);
            if (options.sublevMarginLeft) o.$data.find('.lev').css('margin-left', options.sublevMarginLeft);
            o.$data.find('label').css({ 'display': 'inline', 'margin': '0', 'padding': '0' });
            o.$data.find('.lev1>label').css('font-weight', 'bold');
            o.$data.find('.lev2>label').css('color', '#09C');
            o.$data.find('.v').css({ 'margin-left': '10', 'color': '#F60' });
            if (options.height) {
                o.$data.css({ 'height': options.height, 'overflow-y': 'auto' });
            }
            if (options.width) o.$data.css('width', options.width);

            // 读取或设置控件值
            o.SetValue = function($o, v) {
                if (!$o[0]) return;
                ($o[0].tagName == 'INPUT') ? $o.val(v) : $o.text(v);
            }
            o.GetValue = function($o) {
                return ($o[0].tagName == 'INPUT') ? $o.val() : $o.text();
            }

            // 设置默认值
            o.$item = o.$data.find('label[id="' + options.value + '"]').css({ 'display': 'inherit', 'background-color': '#F2F2F2', 'font-weight': 'bold', 'color': '#090' });
            if (o.$item[0]) {
                o.SetValue(o.$e, o.$item.text());
                o.SetValue(o.$ev, o.$item.attr('id'));
            } else {
                o.SetValue(o.$e, options.value);
            }

            o.$e.click(function() {
                o.$e.after(o.$data).wrap('<div></div>').css({ 'position': 'relative' });
                o.$data.toggle();
                o.$data.scrollTop(o.$data.offset().top);
            });
            o.$data.find('label').css('cursor', 'pointer').click(function() {
                o.SetValue(o.$e, $(this).text());
                o.SetValue(o.$ev, $(this).attr('id'));
                o.$data.hide();
            });
            o.$data.find('a.v').click(function() {
                o.$me = $(this);
                if (o.$me.text() == '[+]') {
                    o.$me.text('[-]');
                    o.$me.nextAll('div').show();
                } else {
                    o.$me.text('[+]');
                    o.$me.nextAll('div').hide();
                }
            });
            o.$Dis = o.$data.find(':first a');
            o.$Dis.eq(0).click(function() {
                o.$a = $(this);
                if (o.$a.text() == '>>>') {
                    o.$a.text('<<<');
                    o.$a.attr('title', '收起所有二级分类');
                    o.$data.find('.lev2').show();
                    o.$data.find('.lev1 .v').text('[-]');
                } else {
                    o.$a.text('>>>');
                    o.$a.attr('title', '展开所有二级分类');
                    o.$data.find('.lev1 .v').text('[+]');
                    o.$data.find('.lev2').hide();
                }
            });
            o.$Dis.eq(1).click(function() {
                o.$a = $(this);
                if (o.$a.text() == '>>') {
                    o.$a.text('<<');
                    o.$a.attr('title', '收起所有三级分类');
                    o.$data.find('.lev2 .v').text('[-]');
                    o.$data.find('.lev3').show();
                } else {
                    o.$a.text('>>');
                    o.$a.attr('title', '展开所有三级分类');
                    o.$data.find('.lev2 .v').text('[+]');
                    o.$data.find('.lev3').hide();
                }
            });

        }
    });
})(jQuery);